package global

import (
	"fmt"
	"github.com/apache/iotdb-client-go/client"
	"github.com/wendy512/go-iecp5/asdu"
)

var (
	Config *ProjectConfig
)

type ProjectConfig struct {
	Fake     bool         `yaml:"fake"` // 是否为假数据
	ReadFreq int64        `yaml:"freq"` // 数据读取频率MS 会设置默认值1000
	Logger   LoggerConfig `yaml:"logger"`
	Server   ServerConfig `yaml:"server"`
	Read     []ReadConfig `yaml:"read"`
}

type LoggerConfig struct {
	LogPath  string `yaml:"logPath"`  // 日志文件路径
	LogName  string `yaml:"logName"`  // 日志文件名称
	SaveDays int    `yaml:"saveDays"` // 日志保存天数
	Level    string `yaml:"level"`    // 日志记录等级
	PrintStd bool   `yaml:"printStd"` // 是否打印到标准输出
}

type ServerConfig struct {
	Host string `yaml:"host"` // 服务host
	Port int    `yaml:"port"` // 服务端口
}

type Field struct {
	Name      string           `yaml:"name"`      // 字段名
	Threshold float32          `yaml:"threshold"` // 变化阈值 超过才会输出
	Ioa       asdu.InfoObjAddr `yaml:"ioa"`       // 字段字段ioa地址
}

type ReadConfig struct {
	Host        string             `yaml:"host"`     // 数据库host
	Port        string             `yaml:"port"`     // 端口
	UserName    string             `yaml:"userName"` // 用户名
	Password    string             `yaml:"password"` // 密码
	Timout      int64              `yaml:"timout"`   // 超时时间
	SessionPool client.SessionPool // 根据以上字段创建的sessionPool
	TimeSeries  string             `yaml:"timeSeries"` // IoTDB序列
	FieldHead   string             `yaml:"fieldHead"`  // 字段前缀
	Fields      []Field            `yaml:"fields"`
}

func GetFieldKey(readConfig ReadConfig, field Field) string {
	return fmt.Sprintf("%s.%s.%s", readConfig.FieldHead, readConfig.TimeSeries, field.Name)
}
